home *** CD-ROM | disk | FTP | other *** search
/ MACD 5 / MACD 5.bin / workbench / tools / czesc_2 / lettermatcher / lettermatcher.s < prev    next >
Text File  |  1993-08-11  |  25KB  |  1,402 lines

  1. ***************************************************************
  2. **
  3. ** LetterMatcher - matches font characters with bitmap data
  4. **
  5. ** v1.0 - 12/08/93 by Henri Veisterä
  6. **
  7. ** LetterMatcher is PD.  Do whit it what ever you want.
  8. ** If you want to distribute modified versions of LetterMatcher
  9. ** indicate somewhere in the distribution that it is a
  10. ** modified version.
  11. **
  12. ***************************************************************
  13.  
  14.     opt    o+,c+
  15.  
  16.         include    exec/exec.i
  17.         include    exec/exec_lib.i
  18.  
  19.         include dos/dos_lib.i
  20.  
  21.     include    libraries/dosextens.i
  22.     include    libraries/diskfont_lib.i
  23.  
  24.     include graphics/graphics_lib.i
  25.     include graphics/text.i
  26.  
  27.     include    devices/timer.i
  28.     include    devices/timer_lib.i
  29.  
  30. CALLGFX MACRO
  31.         move.l  _GfxBase(pc),a6
  32.         jsr     _LVO\1(a6)
  33.         ENDM
  34.  
  35.     move.l    $4,_ExecBase
  36.  
  37.     movem.l    d0/a0,-(sp)        save initial values
  38.     clr.l    returnMsg
  39.  
  40.     sub.l    a1,a1
  41.     CALLEXEC FindTask        find us
  42.     move.l    d0,a4
  43.  
  44.     tst.l    pr_CLI(a4)
  45.     beq.s    fromWorkbench
  46.  
  47.     movem.l    (sp)+,d0/a0        restore regs
  48.     bra.s    end_startup        and run the user prog
  49.  
  50. fromWorkbench
  51.     lea    pr_MsgPort(a4),a0
  52.     CALLEXEC WaitPort        wait for a message
  53.     lea    pr_MsgPort(a4),a0
  54.     CALLEXEC GetMsg            then get it
  55.     move.l    d0,returnMsg        save it for later reply
  56.  
  57.     movem.l    (sp)+,d0/a0        restore
  58. end_startup
  59.     bsr.s    _main            call our program
  60.  
  61.     move.l    d0,-(sp)        save it
  62.  
  63.     tst.l    returnMsg
  64.     beq.s    exitToDOS        if I was a CLI
  65.  
  66.     CALLEXEC Forbid
  67.     move.l    returnMsg(pc),a1
  68.     CALLEXEC ReplyMsg
  69.  
  70. exitToDOS
  71.     move.l    (sp)+,d0        exit code
  72.     rts
  73.  
  74. versio    dc.b    "$VER: LetterMatcher 1.0 (1993-08-12) by Henri Veisterä",0
  75.     cnop    0,4
  76. _main    
  77.     move.l    a0,line
  78.     move.l    d0,linel
  79.     
  80.     lea     dosname(pc),a1
  81.         moveq   #0,d0
  82.         CALLEXEC OpenLibrary
  83.         move.l  d0,_DOSBase
  84.         beq     exit
  85.  
  86.         tst.l    returnMsg
  87.         beq.s    clioutput
  88.  
  89.         lea    errorcon(pc),a0
  90.         move.l    a0,d1
  91.         move.l    #MODE_NEWFILE,d2
  92.         CALLDOS Open
  93.         move.l    d0,outfile
  94.         beq    closedos
  95.  
  96.     bra.s    ercon
  97.  
  98. clioutput
  99.         CALLDOS Output
  100.         move.l  d0,outfile
  101. ercon
  102.  
  103. * Parse command line options
  104.  
  105.     move.l    line(pc),a0
  106.     move.l    linel(pc),d0
  107.     lea    -1(a0,d0.l),a1
  108.  
  109.     cmp.l    a0,a1
  110.     ble    usage
  111.     bsr    nexta
  112. uuess    cmp.b    #'-',(a0)
  113.     bne    noswit
  114. uues    cmp.b    #'s',1(a0)
  115.     beq.s    yestr
  116.     cmp.b    #'S',1(a0)
  117.     beq.s    yestr
  118.     cmp.b    #'m',1(a0)
  119.     beq.s    yesibm
  120.     cmp.b    #'M',1(a0)
  121.     beq.s    yesibm
  122.     cmp.b    #'l',1(a0)
  123.     beq.s    yesloos
  124.     cmp.b    #'L',1(a0)
  125.     beq.s    yesloos
  126.     cmp.b    #'t',1(a0)
  127.     beq.s    yestime
  128.     cmp.b    #'T',1(a0)
  129.     beq.s    yestime
  130.     cmp.b    #'q',1(a0)
  131.     beq.s    yesquie
  132.     cmp.b    #'Q',1(a0)
  133.     beq.s    yesquie
  134.  
  135. uhsa    addq.l    #1,a0
  136.     cmp.b    #32,(a0)
  137.     bhi.s    uues
  138.     bsr    nexta
  139.     bra.s    uuess
  140.  
  141. yestr    move.w    #1,strip
  142.     bra.s    uhsa
  143. yesibm    move.w    #1,ibm
  144.     bra.s    uhsa
  145. yesloos    move.w    #1,loose
  146.     bra.s    uhsa
  147. yestime    move.w    #1,timeit
  148.     bra.s    uhsa
  149. yesquie    move.w    #1,quiet
  150.     bra.s    uhsa
  151.  
  152. noswit    move.l    a0,outname
  153.     bsr    nextb
  154.     clr.b    (a0)
  155.     addq.l    #1,a0
  156.     cmp.l    a0,a1
  157.     ble    usage
  158.     bsr    nexta
  159.     move.l    a0,rawname
  160.     bsr    nextb
  161.     clr.b    (a0)
  162.     addq.l    #1,a0
  163.     cmp.l    a0,a1
  164.     ble    usage
  165.     bsr    nexta
  166.     bsr    atoi
  167.     move.l    d0,d1
  168.     beq    usage
  169.     cmp.l    #2048,d0
  170.     bgt    usage
  171.     asr.l    #3,d0
  172.     move.l    d0,picw
  173.     beq    usage
  174.     and.w    #$7,d1
  175.     beq.s    oke
  176.     lea    non8(pc),a0
  177.     bsr    print
  178.     bra    closecli
  179. oke    cmp.l    a0,a1
  180.     ble    usage
  181.     bsr    nexta
  182.     bsr    atoi
  183.     and.b    #$f8,d0
  184.     move.l    d0,pich
  185.     beq    usage
  186.     cmp.l    a0,a1
  187.     ble    endcli
  188.     bsr    nexta
  189.     move.l    a0,parseline
  190.     bsr    nextb
  191.     move.l    a0,parseend
  192.     cmp.l    a0,a1
  193.     ble    endcli
  194.     bsr    nexta
  195.     move.l    a0,fontname
  196.     bsr    nextb
  197.     clr.b    (a0)
  198.     bra    endcli
  199.  
  200. nexta    cmp.b    #33,(a0)
  201.     bcs.s    uhhoh
  202.     cmp.b    #'"',(a0)
  203.     bne.s    noqu
  204.     moveq    #1,d1
  205.     addq.l    #1,a0
  206.     rts
  207. noqu    moveq    #0,d1
  208.     rts
  209. uhhoh    addq.l    #1,a0
  210.     cmp.l    a0,a1
  211.     bgt.s    nexta
  212.     rts
  213.  
  214. nextb    tst.w    d1
  215.     beq.s    kelp
  216. nextbl    cmp.b    #'"',(a0)
  217.     beq.s    endi
  218.     addq.l    #1,a0
  219.     cmp.l    a0,a1
  220.     bgt.s    nextbl
  221.     rts
  222. kelp    cmp.b    #33,(a0)
  223.     bcs.s    endi
  224.     addq.l    #1,a0
  225.     cmp.l    a0,a1
  226.     bgt.s    kelp
  227. endi    rts
  228.  
  229. * Print out usage if no good options were given
  230.  
  231. usage    lea    usages(pc),a0
  232.     bsr    print
  233.     bra    closecli
  234.  
  235. * Open input and output files and allocate memory for input file
  236. * and read it
  237.  
  238. endcli    move.l    outname(pc),d1
  239.     move.l    #MODE_NEWFILE,d2
  240.     CALLDOS Open
  241.     move.l    d0,myfile
  242.     bne.s    got
  243.  
  244.     lea    nooutp(pc),a0
  245.     lea    datas(pc),a1
  246.     move.l    outname(pc),(a1)
  247.     lea    outline(pc),a3
  248.     lea    outlineend(pc),a4
  249.     lea    putter(pc),a2
  250.     CALLEXEC RawDoFmt
  251.     lea    outline(pc),a0
  252.     bsr    print
  253.  
  254.     bra    closecli
  255.  
  256. got    move.l    rawname(pc),d1
  257.     move.l    #MODE_OLDFILE,d2
  258.     CALLDOS Open
  259.     move.l    d0,rawfile
  260.     bne.s    gotr
  261.  
  262.     lea    noraw(pc),a0
  263.     lea    datas(pc),a1
  264.     move.l    rawname(pc),(a1)
  265.     lea    outline(pc),a3
  266.     lea    outlineend(pc),a4
  267.     lea    putter(pc),a2
  268.     CALLEXEC RawDoFmt
  269.     lea    outline(pc),a0
  270.     bsr    print
  271.  
  272.     bra    closeout
  273.  
  274. gotr    move.l  d0,d1
  275.     moveq    #0,d2
  276.     moveq    #1,d3
  277.     CALLDOS Seek
  278.     move.l  rawfile(pc),d1
  279.     moveq    #0,d2
  280.     moveq    #-1,d3
  281.     CALLDOS Seek
  282.     move.l    d0,rawsize
  283.     bne.s    gots
  284.  
  285.     lea    noraw2(pc),a0
  286.     lea    datas(pc),a1
  287.     move.l    rawname(pc),(a1)
  288.     lea    outline(pc),a3
  289.     lea    outlineend(pc),a4
  290.     lea    putter(pc),a2
  291.     CALLEXEC RawDoFmt
  292.     lea    outline(pc),a0
  293.     bsr    print
  294.  
  295.     bra    closeraw
  296.  
  297. gots    move.l    #MEMF_ANY,d1
  298.     CALLEXEC AllocMem
  299.     move.l    d0,picture
  300.     bne.s    gotp
  301.  
  302.     lea    nomem(pc),a0
  303.     lea    datas(pc),a1
  304.     move.l    rawsize(pc),(a1)
  305.     lea    outline(pc),a3
  306.     lea    outlineend(pc),a4
  307.     lea    putter(pc),a2
  308.     CALLEXEC RawDoFmt
  309.     lea    outline(pc),a0
  310.     bsr    print
  311.  
  312.     bra    closeraw
  313.  
  314. gotp    move.l    rawfile(pc),d1
  315.     move.l    picture(pc),d2
  316.     move.l    rawsize(pc),d3
  317.     CALLDOS Read
  318.     cmp.l    d0,d3
  319.     beq.s    gota
  320.  
  321.     lea    noraw3(pc),a0
  322.     lea    datas(pc),a1
  323.     move.l    rawname(pc),(a1)
  324.     lea    outline(pc),a3
  325.     lea    outlineend(pc),a4
  326.     lea    putter(pc),a2
  327.     CALLEXEC RawDoFmt
  328.     lea    outline(pc),a0
  329.     bsr    print
  330.  
  331.     bra    freeraw
  332.  
  333. * Parse the given FontRange, place a -1 for every character in
  334. * byte array chart to be used in matching, otherwise zero
  335.  
  336. gota    move.l    parseline(pc),a0
  337.     move.l    parseend(pc),a2
  338.     lea    chart(pc),a1
  339.  
  340. norange    cmp.l    a0,a2
  341.     ble    endpars
  342.     bsr    nextt
  343.     bsr    atoh
  344.     bsr    chemi
  345.     tst.w    d1
  346.     bne.s    range
  347.     move.b    #-1,(a1,d0.l)
  348.     bra.s    norange
  349.  
  350. range    lea    (a1,d0.l),a4
  351.     bsr    atoh
  352.     lea    (a1,d0.l),a3
  353. poixx    cmp.l    a4,a3
  354.     blt.s    norange
  355.     move.b    #-1,(a4)+
  356.     bra.s    poixx
  357.  
  358. chemi    moveq    #0,d1
  359. chemil    cmp.b    #'0',(a0)
  360.     bcs.s    ojki
  361.     cmp.b    #'9',(a0)
  362.     bhi.s    ojki
  363.     rts
  364. ojki    cmp.b    #'-',(a0)+
  365.     beq.s    chemis
  366.     cmp.l    a0,a2
  367.     bgt.s    chemil
  368. outsd    rts
  369. chemis    moveq    #1,d1
  370.     cmp.l    a0,a2
  371.     bgt.s    chemil
  372.     rts
  373.  
  374. nextt    cmp.b    #'0',(a0)
  375.     bcs.s    poij
  376.     cmp.b    #'9',(a0)
  377.     bhi.s    poij
  378.     rts
  379. poij    addq.l    #1,a0
  380.     cmp.l    a0,a2
  381.     bgt.s    nextt
  382.     rts
  383.  
  384. atoh    moveq    #0,d0
  385.     moveq    #0,d1
  386. atohl    cmp.b    #'0',(a0)
  387.     bcs.s    poij2
  388.     cmp.b    #'9',(a0)
  389.     bhi.s    poij2
  390.     move.b    (a0)+,d1
  391.     sub.b    #'0',d1
  392.     move.l    d0,d2
  393.     asl.l    #3,d0
  394.     add.l    d2,d0
  395.     add.l    d2,d0
  396.     add.l    d1,d0
  397.     bra    atohl
  398. poij2    cmp.l    #256,d0
  399.     blt.s    oks
  400.     move.l    #255,d0
  401. oks    rts
  402.  
  403. atoi    moveq    #0,d0
  404.     moveq    #0,d1
  405. atoil    cmp.b    #'0',(a0)
  406.     bcs.s    poij3
  407.     cmp.b    #'9',(a0)
  408.     bhi.s    poij3
  409.     move.b    (a0)+,d1
  410.     sub.b    #'0',d1
  411.     move.l    d0,d2
  412.     asl.l    #3,d0
  413.     add.l    d2,d0
  414.     add.l    d2,d0
  415.     add.l    d1,d0
  416.     bra.s    atoil
  417. poij3    rts
  418.  
  419. * Open misc libraries, devices and fonts
  420.  
  421. endpars    lea     gfxname(pc),a1
  422.         moveq   #0,d0
  423.         CALLEXEC OpenLibrary
  424.         move.l  d0,_GfxBase
  425.     bne.s    gotgf
  426.     lea    nogfx(pc),a0
  427.     bsr    print
  428.         bra     freeraw
  429.  
  430. gotgf    lea    dfname(pc),a1
  431.     moveq    #0,d0
  432.     CALLEXEC OpenLibrary
  433.     move.l    d0,_DiskfontBase
  434.     bne.s    gotdf
  435.     lea    nodf(pc),a0
  436.     bsr    print
  437.         bra     closegfx
  438.  
  439. gotdf    CALLEXEC CreateMsgPort
  440.     move.l    d0,myport
  441.     beq    closedf
  442.  
  443.     move.l    d0,a0
  444.     move.b    MP_SIGBIT(a0),sigbit
  445.     move.l    #IOTV_SIZE,d0
  446.     CALLEXEC CreateIORequest
  447.     move.l    d0,myioreq
  448.     beq    cl_port
  449.  
  450.     lea    timer_name(pc),a0
  451.     moveq.l    #0,d0            ;unit
  452.     move.l    myioreq(pc),a1
  453.     moveq.l    #0,d1            ;flags
  454.     CALLEXEC OpenDevice
  455.  
  456.     lea    mytattr(pc),a0
  457.     move.l    fontname(pc),(a0)
  458.     CALLDISKFONT OpenDiskFont
  459.     move.l    d0,myfont
  460.     bne.s    gotfo
  461.  
  462. * Could not open font
  463.  
  464.     lea    nofont1(pc),a0
  465.     lea    datas(pc),a1
  466.     move.l    fontname(pc),(a1)
  467.     lea    outline(pc),a3
  468.     lea    outlineend(pc),a4
  469.     lea    putter(pc),a2
  470.     CALLEXEC RawDoFmt
  471.     lea    outline(pc),a0
  472.     bsr    print
  473.  
  474.     bra    cl_timer
  475.  
  476. gotfo    move.l    myfont(pc),a0
  477.     btst    #FPB_PROPORTIONAL,tf_Flags(a0)
  478.     beq.s    noprop
  479.  
  480. * Font is proportional, exit
  481.  
  482.     lea    nofont2(pc),a0
  483.     lea    datas(pc),a1
  484.     move.l    fontname(pc),(a1)
  485.     lea    outline(pc),a3
  486.     lea    outlineend(pc),a4
  487.     lea    putter(pc),a2
  488.     CALLEXEC RawDoFmt
  489.     lea    outline(pc),a0
  490.     bsr    print
  491.  
  492.     bra    cl_timer
  493.  
  494. noprop    move.l    tf_CharData(a0),fontdata
  495.     move.l    tf_CharLoc(a0),charloc
  496.     move.w    tf_Modulo(a0),fontmod+2
  497.     move.b    tf_LoChar(a0),lowchar+3
  498.     move.b    tf_HiChar(a0),hichar+3
  499.     move.w    tf_YSize(a0),ysize
  500.     subq.w    #1,ysize
  501.     move.w    tf_XSize(a0),d0
  502.     cmp.w    #8,d0
  503.     beq.s    okwi
  504.  
  505. * Font width is not 8 pixels, exit
  506.  
  507.     lea    nofont3(pc),a0
  508.     lea    datas(pc),a1
  509.     move.l    fontname(pc),(a1)
  510.     lea    outline(pc),a3
  511.     lea    outlineend(pc),a4
  512.     lea    putter(pc),a2
  513.     CALLEXEC RawDoFmt
  514.     lea    outline(pc),a0
  515.     bsr    print
  516.  
  517.     bra    cl_timer
  518.  
  519. okwi    move.l    hichar(pc),d6
  520.     sub.l    lowchar(pc),d6
  521.     subq.l    #1,d6
  522.     move.w    d6,nochars
  523.  
  524.     move.l    rawsize(pc),d0
  525.     divu.w    picw+2(pc),d0
  526.     cmp.w    pich+2(pc),d0
  527.     bge.s    ums
  528.     and.b    #$f8,d0
  529.     move.w    d0,pich+2
  530.  
  531. ums    move.l    #0,pich2
  532.  
  533. * Allocate memory for linear font bitmap data
  534.  
  535.     moveq    #1,d0
  536.     add.w    nochars(pc),d0
  537.     asl.l    #3,d0
  538.     move.l    d0,fontmapsize
  539.     move.l    #MEMF_ANY,d1
  540.     CALLEXEC AllocMem
  541.     move.l    d0,fontmap
  542.     bne.s    gotfm
  543.  
  544. * Out of memory, exit
  545.  
  546.     lea    nomem(pc),a0
  547.     lea    datas(pc),a1
  548.     move.l    fontmapsize(pc),(a1)
  549.     lea    outline(pc),a3
  550.     lea    outlineend(pc),a4
  551.     lea    putter(pc),a2
  552.     CALLEXEC RawDoFmt
  553.     lea    outline(pc),a0
  554.     bsr    print
  555.  
  556.     bra    closefont
  557.  
  558. * Copy the bitplane font data to linear form so we can match it
  559. * long word at a time
  560.  
  561. gotfm    move.l    fontdata(pc),a2
  562.     move.l    charloc(pc),a3
  563.     move.l    fontmap(pc),a1
  564.     move.l    fontmod(pc),d0
  565.     move.w    nochars(pc),d1
  566. loopi    move.w    (a3)+,d2
  567.     asr.w    #3,d2
  568.     lea    (a2,d2.w),a0
  569.     addq.l    #2,a3
  570.     move.b    (a0),(a1)+
  571.     add.l    d0,a0
  572.     move.b    (a0),(a1)+
  573.     add.l    d0,a0
  574.     move.b    (a0),(a1)+
  575.     add.l    d0,a0
  576.     move.b    (a0),(a1)+
  577.     add.l    d0,a0
  578.     move.b    (a0),(a1)+
  579.     add.l    d0,a0
  580.     move.b    (a0),(a1)+
  581.     add.l    d0,a0
  582.     move.b    (a0),(a1)+
  583.     add.l    d0,a0
  584.     move.b    (a0),(a1)+
  585.     dbf    d1,loopi
  586.  
  587.     tst.w    quiet
  588.     bne.s    nouut
  589.  
  590. * Print status info to CLI
  591.  
  592.     lea    report(pc),a0
  593.     lea    outline(pc),a3
  594.     lea    outlineend(pc),a4
  595.     lea    datas(pc),a1
  596.     move.l    pich2(pc),(a1)
  597.     move.l    pich(pc),4(a1)
  598.     lea    putter(pc),a2
  599.     CALLEXEC RawDoFmt
  600.     lea    outline(pc),a0
  601.     bsr    print
  602.  
  603. * Start time constant
  604.  
  605. nouut    move.l    myioreq(pc),a2
  606.     move.l    IO_DEVICE(a2),a6
  607.     lea    IOTV_TIME(a2),a0
  608.     jsr    _LVOReadEClock(a6)
  609.     move.l    EV_HI+IOTV_TIME(a2),time1
  610.     move.l    EV_LO+IOTV_TIME(a2),time2
  611.  
  612. * Start matching the picture
  613.  
  614.     move.l    picture(pc),a0
  615.     move.l    picw(pc),d3
  616.  
  617. allrows    move.l    picw(pc),d5
  618.     subq.l    #1,d5
  619.     lea    outline(pc),a2
  620.  
  621. allcols    move.l    d5,-(sp)
  622.  
  623.     lea    chart(pc),a4
  624.     add.l    lowchar(pc),a4
  625.     move.w    nochars(pc),d6
  626.     moveq    #0,d5
  627.     move.l    lowchar(pc),d4
  628.  
  629. * Copy the bitmap source data to linear form
  630.  
  631.     movem.l    a0,-(sp)
  632.     lea    vert(pc),a1
  633.     move.b    (a0),(a1)+
  634.     add.l    d3,a0
  635.     move.b    (a0),(a1)+
  636.     add.l    d3,a0
  637.     move.b    (a0),(a1)+
  638.     add.l    d3,a0
  639.     move.b    (a0),(a1)+
  640.     add.l    d3,a0
  641.     move.b    (a0),(a1)+
  642.     add.l    d3,a0
  643.     move.b    (a0),(a1)+
  644.     add.l    d3,a0
  645.     move.b    (a0),(a1)+
  646.     add.l    d3,a0
  647.     move.b    (a0),(a1)+
  648.     move.l    fontmap(pc),a1
  649.  
  650. * Test if to use loose matching
  651.  
  652.     tst.w    loose
  653.     bne    loosema
  654.  
  655. * Innermost loop, match source bitmap with all font characters
  656.  
  657. allxs    tst.b    (a4)+
  658.     beq    nobigis
  659.  
  660.     moveq    #0,d7
  661.     move.l    vert(pc),d0
  662.     move.l    (a1)+,d1
  663.     eor.l    d1,d0
  664.  
  665. * Count matching bits
  666.  
  667.     btst    #0,d0
  668.     bne.s    noad401
  669.     addq    #1,d7
  670. noad401    btst    #1,d0
  671.     bne.s    noad402
  672.     addq    #1,d7
  673. noad402    btst    #2,d0
  674.     bne.s    noad403
  675.     addq    #1,d7
  676. noad403    btst    #3,d0
  677.     bne.s    noad404
  678.     addq    #1,d7
  679. noad404    btst    #4,d0
  680.     bne.s    noad405
  681.     addq    #1,d7
  682. noad405    btst    #5,d0
  683.     bne.s    noad406
  684.     addq    #1,d7
  685. noad406    btst    #6,d0
  686.     bne.s    noad407
  687.     addq    #1,d7
  688. noad407    btst    #7,d0
  689.     bne.s    noad408
  690.     addq    #1,d7
  691. noad408    btst    #8,d0
  692.     bne.s    noad409
  693.     addq    #1,d7
  694. noad409    btst    #9,d0
  695.     bne.s    noad410
  696.     addq    #1,d7
  697. noad410    btst    #10,d0
  698.     bne.s    noad411
  699.     addq    #1,d7
  700. noad411    btst    #11,d0
  701.     bne.s    noad412
  702.     addq    #1,d7
  703. noad412    btst    #12,d0
  704.     bne.s    noad413
  705.     addq    #1,d7
  706. noad413    btst    #13,d0
  707.     bne.s    noad414
  708.     addq    #1,d7
  709. noad414    btst    #14,d0
  710.     bne.s    noad415
  711.     addq    #1,d7
  712. noad415    btst    #15,d0
  713.     bne.s    noad416
  714.     addq    #1,d7
  715. noad416    btst    #16,d0
  716.     bne.s    noad417
  717.     addq    #1,d7
  718. noad417    btst    #17,d0
  719.     bne.s    noad418
  720.     addq    #1,d7
  721. noad418    btst    #18,d0
  722.     bne.s    noad419
  723.     addq    #1,d7
  724. noad419    btst    #19,d0
  725.     bne.s    noad420
  726.     addq    #1,d7
  727. noad420    btst    #20,d0
  728.     bne.s    noad421
  729.     addq    #1,d7
  730. noad421    btst    #21,d0
  731.     bne.s    noad422
  732.     addq    #1,d7
  733. noad422    btst    #22,d0
  734.     bne.s    noad423
  735.     addq    #1,d7
  736. noad423    btst    #23,d0
  737.     bne.s    noad424
  738.     addq    #1,d7
  739. noad424    btst    #24,d0
  740.     bne.s    noad425
  741.     addq    #1,d7
  742. noad425    btst    #25,d0
  743.     bne.s    noad426
  744.     addq    #1,d7
  745. noad426    btst    #26,d0
  746.     bne.s    noad427
  747.     addq    #1,d7
  748. noad427    btst    #27,d0
  749.     bne.s    noad428
  750.     addq    #1,d7
  751. noad428    btst    #28,d0
  752.     bne.s    noad429
  753.     addq    #1,d7
  754. noad429    btst    #29,d0
  755.     bne.s    noad430
  756.     addq    #1,d7
  757. noad430    btst    #30,d0
  758.     bne.s    noad431
  759.     addq    #1,d7
  760. noad431    btst    #31,d0
  761.     bne.s    noad432
  762.     addq    #1,d7
  763. noad432
  764.  
  765.     move.l    vert+4(pc),d0
  766.     move.l    (a1)+,d1
  767.     eor.l    d1,d0
  768.  
  769.     btst    #0,d0
  770.     bne.s    noad501
  771.     addq    #1,d7
  772. noad501    btst    #1,d0
  773.     bne.s    noad502
  774.     addq    #1,d7
  775. noad502    btst    #2,d0
  776.     bne.s    noad503
  777.     addq    #1,d7
  778. noad503    btst    #3,d0
  779.     bne.s    noad504
  780.     addq    #1,d7
  781. noad504    btst    #4,d0
  782.     bne.s    noad505
  783.     addq    #1,d7
  784. noad505    btst    #5,d0
  785.     bne.s    noad506
  786.     addq    #1,d7
  787. noad506    btst    #6,d0
  788.     bne.s    noad507
  789.     addq    #1,d7
  790. noad507    btst    #7,d0
  791.     bne.s    noad508
  792.     addq    #1,d7
  793. noad508    btst    #8,d0
  794.     bne.s    noad509
  795.     addq    #1,d7
  796. noad509    btst    #9,d0
  797.     bne.s    noad510
  798.     addq    #1,d7
  799. noad510    btst    #10,d0
  800.     bne.s    noad511
  801.     addq    #1,d7
  802. noad511    btst    #11,d0
  803.     bne.s    noad512
  804.     addq    #1,d7
  805. noad512    btst    #12,d0
  806.     bne.s    noad513
  807.     addq    #1,d7
  808. noad513    btst    #13,d0
  809.     bne.s    noad514
  810.     addq    #1,d7
  811. noad514    btst    #14,d0
  812.     bne.s    noad515
  813.     addq    #1,d7
  814. noad515    btst    #15,d0
  815.     bne.s    noad516
  816.     addq    #1,d7
  817. noad516    btst    #16,d0
  818.     bne.s    noad517
  819.     addq    #1,d7
  820. noad517    btst    #17,d0
  821.     bne.s    noad518
  822.     addq    #1,d7
  823. noad518    btst    #18,d0
  824.     bne.s    noad519
  825.     addq    #1,d7
  826. noad519    btst    #19,d0
  827.     bne.s    noad520
  828.     addq    #1,d7
  829. noad520    btst    #20,d0
  830.     bne.s    noad521
  831.     addq    #1,d7
  832. noad521    btst    #21,d0
  833.     bne.s    noad522
  834.     addq    #1,d7
  835. noad522    btst    #22,d0
  836.     bne.s    noad523
  837.     addq    #1,d7
  838. noad523    btst    #23,d0
  839.     bne.s    noad524
  840.     addq    #1,d7
  841. noad524    btst    #24,d0
  842.     bne.s    noad525
  843.     addq    #1,d7
  844. noad525    btst    #25,d0
  845.     bne.s    noad526
  846.     addq    #1,d7
  847. noad526    btst    #26,d0
  848.     bne.s    noad527
  849.     addq    #1,d7
  850. noad527    btst    #27,d0
  851.     bne.s    noad528
  852.     addq    #1,d7
  853. noad528    btst    #28,d0
  854.     bne.s    noad529
  855.     addq    #1,d7
  856. noad529    btst    #29,d0
  857.     bne.s    noad530
  858.     addq    #1,d7
  859. noad530    btst    #30,d0
  860.     bne.s    noad531
  861.     addq    #1,d7
  862. noad531    btst    #31,d0
  863.     bne.s    noad532
  864.     addq    #1,d7
  865. noad532
  866.  
  867.     cmp.w    d5,d7
  868.     bls.s    bobib
  869.     move.w    d4,biguns+2
  870.     move.w    d7,d5
  871.     cmp.b    #64,d7
  872.     bne.s    bobib
  873.     movem.l    (sp)+,a0
  874.     bra    tiktis
  875. nobigis    addq.l    #8,a1
  876. bobib    addq.l    #1,d4
  877.     dbf    d6,allxs
  878.  
  879.     movem.l    (sp)+,a0
  880.     bra    tiktis
  881.  
  882. loosema    tst.b    (a4)+
  883.     beq    nobigu2
  884.  
  885.     moveq    #0,d7
  886.     move.l    vert(pc),d0
  887.     move.l    (a1)+,d1
  888.     eor.l    d1,d0
  889.     move.l    d0,-(sp)
  890.     move.l    vert+4(pc),d0
  891.     move.l    (a1)+,d1
  892.     eor.l    d1,d0
  893.     or.l    (sp)+,d0
  894.  
  895.     btst    #0,d0
  896.     bne.s    noad301
  897.     addq    #1,d7
  898. noad301    btst    #1,d0
  899.     bne.s    noad302
  900.     addq    #1,d7
  901. noad302    btst    #2,d0
  902.     bne.s    noad303
  903.     addq    #1,d7
  904. noad303    btst    #3,d0
  905.     bne.s    noad304
  906.     addq    #1,d7
  907. noad304    btst    #4,d0
  908.     bne.s    noad305
  909.     addq    #1,d7
  910. noad305    btst    #5,d0
  911.     bne.s    noad306
  912.     addq    #1,d7
  913. noad306    btst    #6,d0
  914.     bne.s    noad307
  915.     addq    #1,d7
  916. noad307    btst    #7,d0
  917.     bne.s    noad308
  918.     addq    #1,d7
  919. noad308    btst    #8,d0
  920.     bne.s    noad309
  921.     addq    #1,d7
  922. noad309    btst    #9,d0
  923.     bne.s    noad310
  924.     addq    #1,d7
  925. noad310    btst    #10,d0
  926.     bne.s    noad311
  927.     addq    #1,d7
  928. noad311    btst    #11,d0
  929.     bne.s    noad312
  930.     addq    #1,d7
  931. noad312    btst    #12,d0
  932.     bne.s    noad313
  933.     addq    #1,d7
  934. noad313    btst    #13,d0
  935.     bne.s    noad314
  936.     addq    #1,d7
  937. noad314    btst    #14,d0
  938.     bne.s    noad315
  939.     addq    #1,d7
  940. noad315    btst    #15,d0
  941.     bne.s    noad316
  942.     addq    #1,d7
  943. noad316    btst    #16,d0
  944.     bne.s    noad317
  945.     addq    #1,d7
  946. noad317    btst    #17,d0
  947.     bne.s    noad318
  948.     addq    #1,d7
  949. noad318    btst    #18,d0
  950.     bne.s    noad319
  951.     addq    #1,d7
  952. noad319    btst    #19,d0
  953.     bne.s    noad320
  954.     addq    #1,d7
  955. noad320    btst    #20,d0
  956.     bne.s    noad321
  957.     addq    #1,d7
  958. noad321    btst    #21,d0
  959.     bne.s    noad322
  960.     addq    #1,d7
  961. noad322    btst    #22,d0
  962.     bne.s    noad323
  963.     addq    #1,d7
  964. noad323    btst    #23,d0
  965.     bne.s    noad324
  966.     addq    #1,d7
  967. noad324    btst    #24,d0
  968.     bne.s    noad325
  969.     addq    #1,d7
  970. noad325    btst    #25,d0
  971.     bne.s    noad326
  972.     addq    #1,d7
  973. noad326    btst    #26,d0
  974.     bne.s    noad327
  975.     addq    #1,d7
  976. noad327    btst    #27,d0
  977.     bne.s    noad328
  978.     addq    #1,d7
  979. noad328    btst    #28,d0
  980.     bne.s    noad329
  981.     addq    #1,d7
  982. noad329    btst    #29,d0
  983.     bne.s    noad330
  984.     addq    #1,d7
  985. noad330    btst    #30,d0
  986.     bne.s    noad331
  987.     addq    #1,d7
  988. noad331    btst    #31,d0
  989.     bne.s    noad332
  990.     addq    #1,d7
  991. noad332
  992.  
  993.     cmp.w    d5,d7
  994.     bls.s    nobig22
  995.     move.w    d4,biguns+2
  996.     move.w    d7,d5
  997.     cmp.b    #32,d7
  998.     bne.s    nobig22
  999.     move.l    (sp)+,a0
  1000.     bra.s    tiktis
  1001. nobigu2    addq.l    #8,a1
  1002. nobig22    addq.l    #1,d4
  1003.     dbf    d6,loosema
  1004.     move.l    (sp)+,a0
  1005.  
  1006. * Append matched character to output line
  1007.  
  1008. tiktis    move.b    biguns+3(pc),(a2)+
  1009.     addq.l    #1,a0
  1010.     move.l    (sp)+,d5
  1011.     dbf    d5,allcols
  1012.  
  1013. * Do/Don't do stripping of trailing spaces and/or CR+LF/LF appending
  1014.  
  1015.     tst.w    strip
  1016.     beq.s    nostrip
  1017. jas    cmp.b    #' ',-1(a2)
  1018.     bne.s    nostrip
  1019.     subq.l    #1,a2
  1020.     lea    outline(pc),a6
  1021.     cmp.l    a6,a2
  1022.     bgt.s    jas
  1023. nostrip    tst.w    ibm
  1024.     beq.s    onlylf
  1025.     move.b    #13,(a2)+
  1026. onlylf    move.b    #10,(a2)+
  1027.     move.b    #0,(a2)
  1028.  
  1029.     movem.l    d0-d3/a0-a4,-(sp)
  1030.  
  1031. * Output one line to output file
  1032.  
  1033.     lea    outline(pc),a0
  1034.     move.l    a0,d2
  1035. noze    tst.b    (a0)+
  1036.     bne.s    noze
  1037.     sub.l    d2,a0
  1038.     move.l    a0,d3
  1039.     subq.l    #1,d3
  1040.     move.l    myfile(pc),d1
  1041.     CALLDOS Write
  1042.     cmp.l    d0,d3
  1043.     beq.s    ok_wr
  1044.  
  1045.     lea    nowrite(pc),a0
  1046.     lea    datas(pc),a1
  1047.     move.l    outname(pc),(a1)
  1048.     lea    outline(pc),a3
  1049.     lea    outlineend(pc),a4
  1050.     lea    putter(pc),a2
  1051.     CALLEXEC RawDoFmt
  1052.     lea    outline(pc),a0
  1053.     bsr    print
  1054.  
  1055.     bra    ctrlc
  1056.  
  1057. ok_wr    addq.l    #8,pich2
  1058.     move.l    pich(pc),d0
  1059.     cmp.l    pich2(pc),d0
  1060.     ble    noctrlc        ; all done, don't check break or print status info
  1061.  
  1062.     tst.w    quiet
  1063.     bne.s    readc
  1064.  
  1065. * Print matching status info to CLI
  1066.  
  1067.     lea    report(pc),a0
  1068.     lea    outline(pc),a3
  1069.     lea    outlineend(pc),a4
  1070.     lea    datas(pc),a1
  1071.     move.l    pich2(pc),d0
  1072.     move.l    d0,(a1)
  1073.     move.l    pich(pc),d1
  1074.     move.l    d1,4(a1)
  1075.     
  1076.     mulu.w    #100,d0
  1077.     divu.w    d1,d0
  1078.     asr.l    #1,d1
  1079.     swap    d0
  1080.     cmp.w    d1,d0
  1081.     blt.s    swa
  1082.     swap    d0
  1083.     addq.w    #1,d0
  1084.     bra.s    yswa
  1085. swa    swap    d0
  1086. yswa    and.l    #$ffff,d0
  1087.     move.l    d0,8(a1)
  1088.     lea    putter(pc),a2
  1089.     CALLEXEC RawDoFmt
  1090.     lea    outline(pc),a0
  1091.     bsr    print
  1092.     bra.s    readc
  1093.  
  1094. * Subroutine to pass to RawDoFmt()
  1095.  
  1096. putter    cmp.l    a3,a4
  1097.     bgt.s    putok
  1098.     lea    outline(pc),a3
  1099. putok    move.b    d0,(a3)+
  1100.     rts
  1101.  
  1102. * Test if user BREAK'ed the program
  1103.  
  1104. readc   moveq    #0,d0
  1105.         moveq    #0,d1
  1106.         CALLEXEC SetSignal
  1107.         and.l    #SIGBREAKF_CTRL_C,d0
  1108.         beq.s    noctrlc
  1109.  
  1110. * Break signal received, exit
  1111.  
  1112.         moveq    #0,d0
  1113.         move.l    #SIGBREAKF_CTRL_C,d1
  1114.         CALLEXEC SetSignal
  1115.  
  1116.         lea    break(pc),a0
  1117.     bsr    print
  1118.  
  1119. ctrlc    movem.l    (sp)+,d0-d3/a0-a4
  1120.  
  1121.         bra    closefont
  1122.  
  1123. noctrlc    movem.l    (sp)+,d0-d3/a0-a4
  1124.  
  1125.     move.w    ysize(pc),d0
  1126.     move.l    picw(pc),d1
  1127.     mulu.w    d0,d1
  1128.     add.l    d1,a0
  1129.     move.l    picture(pc),d0
  1130.     add.l    rawsize(pc),d0
  1131.     cmp.l    a0,d0
  1132.     ble.s    tatsit
  1133.     move.l    pich(pc),d0
  1134.     cmp.l    pich2(pc),d0
  1135.     bgt    allrows
  1136.  
  1137. * End time constant
  1138.  
  1139. tatsit    move.l    myioreq(pc),a2
  1140.     move.l    IO_DEVICE(a2),a6
  1141.     lea    IOTV_TIME(a2),a0
  1142.     jsr    _LVOReadEClock(a6)
  1143.     move.l    d0,ticks
  1144.  
  1145.     tst.w    quiet
  1146.     bne.s    timeko
  1147.  
  1148. * Print done message to CLI
  1149.  
  1150.     lea    report2(pc),a0
  1151.     lea    outline(pc),a3
  1152.     lea    outlineend(pc),a4
  1153.     lea    datas(pc),a1
  1154.     move.l    pich2(pc),(a1)
  1155.     lea    putter(pc),a2
  1156.     CALLEXEC RawDoFmt
  1157.     lea    outline(pc),a0
  1158.     bsr    print
  1159.  
  1160. timeko    tst.w    timeit
  1161.     beq.s    notimes
  1162.  
  1163. * Print elapsed time to CLI
  1164.  
  1165.     move.l    myioreq(pc),a2
  1166.     move.l    EV_HI+IOTV_TIME(a2),d0
  1167.     move.l    EV_LO+IOTV_TIME(a2),d1
  1168.     move.l    time1(pc),d2
  1169.     move.l    time2(pc),d3
  1170.     sub.l    d3,d1
  1171.     ;subx.l    d2,d0
  1172.  
  1173.     lea    datas(pc),a1
  1174.     move.l    d1,(a1)
  1175.     move.l    ticks(pc),4(a1)
  1176.     
  1177.     lea    str2(pc),a0
  1178.     lea    putter(pc),a2
  1179.     lea    outline(pc),a3
  1180.     lea    outlineend(pc),a4
  1181.     CALLEXEC RawDoFmt
  1182.  
  1183.     lea    outline(pc),a0
  1184.     bsr    print
  1185.  
  1186. * All matching done, free everything
  1187.  
  1188. notimes    move.l    #0,error
  1189.  
  1190. freemap    tst.l    fontmap
  1191.     beq.s    closefont
  1192.     move.l    fontmapsize(pc),d0
  1193.     move.l    fontmap(pc),a1
  1194.     CALLEXEC FreeMem
  1195.  
  1196. closefont
  1197.     tst.l    myfont
  1198.     beq.s    closedf
  1199.     move.l    myfont(pc),a1
  1200.     CALLGFX CloseFont
  1201.  
  1202. cl_timer
  1203.     move.l    myioreq(pc),a1
  1204.     move.l    IO_DEVICE(a1),d0
  1205.     beq.s    cl_req
  1206.     CALLEXEC CloseDevice
  1207.  
  1208. cl_req    tst.l    myioreq
  1209.     beq.s    cl_port
  1210.     move.l    myioreq(pc),a0
  1211.     CALLEXEC DeleteIORequest
  1212.  
  1213. cl_port    tst.l    myport
  1214.     beq.s    closedf
  1215.     move.l    myport(pc),a0
  1216.     CALLEXEC DeleteMsgPort
  1217.  
  1218. closedf    tst.l    _DiskfontBase
  1219.     beq.s    closegfx
  1220.     move.l    _DiskfontBase(pc),a1
  1221.     CALLEXEC CloseLibrary
  1222.  
  1223. closegfx
  1224.     tst.l    _GfxBase
  1225.     beq.s    freeraw
  1226.     move.l    _GfxBase(pc),a1
  1227.     CALLEXEC CloseLibrary
  1228.  
  1229. freeraw    tst.l    picture
  1230.     beq.s    closeraw
  1231.     move.l    rawsize(pc),d0
  1232.     move.l    picture(pc),a1
  1233.     CALLEXEC FreeMem
  1234.  
  1235. closeraw
  1236.     move.l    rawfile(pc),d1
  1237.     beq.s    closeout
  1238.     CALLDOS Close
  1239.  
  1240. closeout
  1241.     move.l    myfile(pc),d1
  1242.     beq.s    closecli
  1243.     CALLDOS Close
  1244.  
  1245. closecli
  1246.     tst.l    returnMsg
  1247.     beq.s    closedos
  1248.     move.l    outfile(pc),d1
  1249.     beq.s    closedos
  1250.     CALLDOS Close
  1251.  
  1252. closedos
  1253.     tst.l    _DOSBase
  1254.     beq.s    exit
  1255.     move.l    _DOSBase(pc),a1
  1256.     CALLEXEC CloseLibrary
  1257.  
  1258. exit    move.l    error(pc),d0
  1259.     rts
  1260.  
  1261. * Sub routine to print a null terminated string to CLI
  1262.  
  1263. print    move.l    a0,-(sp)
  1264. nosep    tst.b    (a0)+
  1265.     bne.s    nosep
  1266.     sub.l    (sp),a0
  1267.     move.l    a0,d3
  1268.     subq.l    #1,d3
  1269.     move.l    (sp)+,d2
  1270.     move.l    outfile(pc),d1
  1271.     CALLDOS Write
  1272.     rts
  1273.  
  1274. * Variables and pointers
  1275.  
  1276. picw        dc.l    640/8        ; picture width in bytes
  1277. pich        dc.l    256        ; picture height in pixels
  1278. pich2        dc.l    0        ; rows already matched
  1279. picture        dc.l    0        ; pointer to raw bitmap data
  1280. biguns        dc.l    0        ; character with the most matches
  1281. fontmapsize    dc.l    0        ; size of linear font bitmap data
  1282. fontmap        dc.l    0        ; ptr to linear font bitmap data
  1283. rawsize        dc.l    0        ; input file size
  1284. rawfile        dc.l    0        ; file handle of input file
  1285. myfile        dc.l    0        ; file handle of output file
  1286. outname        dc.l    0        ; ptr to output name string
  1287. rawname        dc.l    0        ; ptr to input name string
  1288. fontname    dc.l    topazname    ; ptr to font name string
  1289. parseline    dc.l    defrange    ; ptr to font range string
  1290. parseend    dc.l    defrangeend-1    ; ptr to end of font range string
  1291. line        dc.l    0        ; ptr to command line options
  1292. linel        dc.l    0        ; length of command line
  1293. charloc        dc.l    0        ; ptr to font bitmap offsets
  1294. fontdata    dc.l    0        ; ptr to original font bitmap data
  1295. fontmod        dc.l    0        ; modulo of original font bitmap
  1296. lowchar        dc.l    0        ; lowest char found in font
  1297. hichar        dc.l    0        ; highest -"-
  1298. ysize        dc.w    0        ; font ysize-1, for dcb loops
  1299. nochars        dc.w    0        ; number of chars in font-1
  1300. strip        dc.w    0        ; bool strip trailing spaces
  1301. ibm        dc.w    0        ; bool CR+LF appending
  1302. loose        dc.w    0        ; bool loose matching
  1303. timeit        dc.w    0        ; bool display timing info
  1304. quiet        dc.w    0        ; bool display match status
  1305. outfile        dc.l    0        ; file handle of CLI output file
  1306. myfont        dc.l    0        ; ptr to font used
  1307. returnMsg    dc.l    0        ; if started from WB, reply
  1308. error        dc.l    20        ; return code to CLI
  1309. _ExecBase    dc.l    0        ; library bases
  1310. _GfxBase    dc.l    0
  1311. _DOSBase    dc.l    0
  1312. _DiskfontBase    dc.l    0
  1313. sigbit        dc.l    0        ; sigbit of timer.device port
  1314. myport        dc.l    0        ; ptr to timer.device port
  1315. myioreq        dc.l    0        ; ptr to timer.device ioreq
  1316. time1        dc.l    0        ; start time eclocks high lword
  1317. time2        dc.l    0        ; start time eclocks low lword
  1318. ticks        dc.l    0        ; no of ticks/second
  1319.  
  1320. * Misc strings
  1321.  
  1322. dosname        dc.b    "dos.library",0
  1323.         even
  1324. gfxname        dc.b    "graphics.library",0
  1325.         even
  1326. dfname        dc.b    "diskfont.library",0
  1327.         even
  1328. timer_name    dc.b    "timer.device",0
  1329.         even
  1330. errorcon        dc.b    "CON:///216/LetterMatcher ERROR MSG/CLOSE/AUTO/WAIT",0
  1331.                 even
  1332. break        dc.b    10,"***BREAK",10,0
  1333.         even
  1334. topazname    dc.b    "topaz.font",0
  1335.         even
  1336. defrange    dc.b    "32-126,160-254"
  1337.         even
  1338. defrangeend
  1339. usages        dc.b    "LetterMatcher v1.0 - 12/08/93 by Henri Veisterä",10
  1340.         dc.b    "USAGE from CLI:",10
  1341.         dc.b    "LetterMatcher [-stmlq] OutName Picture Width Height [FontRange [FontName]]",10,10
  1342.         dc.b    " OutName   - Name of the output text file",10
  1343.         dc.b    " Picture   - Input picture in raw bitmap format",10
  1344.         dc.b    " Width     - Width of the input Picture in pixels (max 2048)",10
  1345.         dc.b    " Height    - Height of the input Picture in pixels",10
  1346.         dc.b    " FontRange - Range of font characters to use for matching",10
  1347.         dc.b    "             ASCII codes of chars separated with commas ",10
  1348.         dc.b    "             Or ranges like LOWCHAR-HICHAR (default: 32-126,160-254)",10
  1349.         dc.b    " FontName  - Name of font to use for matching (default: topaz.font)",10
  1350.         dc.b    "             Font must be nonproportional and have a width",10
  1351.         dc.b    "             and height of 8 pixels",10
  1352.         dc.b    " Switches:",10
  1353.         dc.b    " -s        - Strip trailing spaces from output",10
  1354.         dc.b    " -t        - Report elapsed matching time (in EClock ticks)",10
  1355.         dc.b    " -m        - Add CR/LF after each line (default: only LF)",10
  1356.         dc.b    " -l        - Loose matching, twice as fast",10
  1357.         dc.b    " -q        - Suppress any CLI output but error messages",10,10
  1358.         dc.b    "EXAMPLE:",10
  1359.         dc.b    "LetterMatcher -stl MyPic.txt MyPic.raw 640 200 3-6,21,32-126,128-254 ibm.font",10,0
  1360.         even
  1361. report        dc.b    10,27,"[ALetterMatcher: Converting line %ld/%ld (%ld%% done) ...",0
  1362.         even
  1363. report2        dc.b    10,27,"[A",27,"[KLetterMatcher: Converted %ld lines.",10,0
  1364.         even
  1365. non8        dc.b    "Picture width not divisible by 8.  Reformat your picture.",10,0
  1366.         even
  1367. nooutp        dc.b    "Could not open output file '%s'.",10,0
  1368.         even
  1369. noraw        dc.b    "Could not open input picture file '%s'.",10,0
  1370.         even
  1371. noraw2        dc.b    "Input picture file '%s' size zero.",10,0
  1372.         even
  1373. noraw3        dc.b    "Error reading input picture file '%s'.",10,0
  1374.         even
  1375. nomem        dc.b    "Out of memory allocating %ld bytes.",10,0
  1376.         even
  1377. nogfx        dc.b    "Could not open graphics.library.",10,0
  1378.         even
  1379. nodf        dc.b    "Could not open diskfont.library.",10,0
  1380.         even
  1381. nofont1        dc.b    "Could not open your font '%s' (height 8).",10,0
  1382.         even
  1383. nofont2        dc.b    "Font '%s' is proportional.  Use a fixed width font.",10,0
  1384.         even
  1385. nofont3        dc.b    "Font '%s' width is not 8 pixels.",10,0
  1386.         even
  1387. nowrite        dc.b    10,"Error writting to output file '%s'.",10,0
  1388.         even
  1389. str2        dc.b    "Time elapsed: %lu ticks (%lu ticks/sec)",10,0
  1390.         even
  1391.  
  1392. * Data blocks
  1393.  
  1394. mytattr        dc.l    topazname
  1395.         dc.w    8
  1396.         dc.b    0,FPF_DISKFONT!FPF_DESIGNED
  1397. datas        dcb.l    4,0        ; data stream for RawDoFmt()
  1398. vert        dcb.b    8,0        ; buffer for linear source data
  1399. chart        dcb.b    256,0        ; -1 for chars to use for matching
  1400. outline        dcb.b    260,0        ; buffer for output lines
  1401. outlineend
  1402.